package cn.yun.session;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
/*
session :
1.概念:服务器端会话技术,在一次会话的多次请求间共享数据,将数据保存在服务器的对象中
2.快速入门:1.获取HttpSession
            HttpSession session = request.getSession();
          2.使用 HttpSession
             void setAttribute(String name,Object value):
             Object  getAttribute(String name):
             void removeAttribute(String name):
3.原理:
        Session的实现是依赖于cookie的
4.细节:
    1.当客户端关闭后,服务器不关闭,两次获取session是否是同一个?
      默认情况下不是同一个 因为session的实现依赖于cookie  客户端关闭 cookie会被销毁
      如果需要相同 则可以创建cookie 键为JSESSIONID,设置最大存活时间,让cookie持久化保存
        代码:Cookie cookie = new Cookie("JSESSIONID", session.getId());
            cookie.setMaxAge(60*60);
            response.addCookie(cookie);

    2.当客户端不关闭后,服务器端关闭,两次获取session是否是同一个?
     不是同一个 服务器端关闭 session被销毁
     要确保是同一数据不丢失:
                       session的钝化:在服务器正常关闭之前,将session对象序列化到硬盘上
                       session的活化:在服务器启动后,将session文件转化为内存中的session对象即可


    3.Session的失效时间?

*/
@WebServlet("/sessionDemo1")
public class SessionDemo1 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //使用session共享数据
        //1.获取session
        HttpSession session = request.getSession();
        //2.存储数据
        session.setAttribute("msg","hello session");
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
}
